In computing systems, resources are shared amongst clients by allocating resources to a client and deallocating the resources when the resources are no longer being used by the client. While the resources are allocated to a client, the client has exclusive use of the resource. When the resource is deallocated, the resource is available for use by other clients. In order to allocate and deallocate resources, locking mechanisms, such as software locks (e.g., semaphores, mutex, etc.) and/or hardware locks are used so that the clients of the computing system do not receive the same resources.